Detailed Survival analyis of the Survival lung data.

Libraries

library(survival)
library(FRESA.CAD)
## Loading required package: Rcpp
## Loading required package: stringr
## Loading required package: miscTools
## Loading required package: Hmisc
## 
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:base':
## 
##     format.pval, units
## Loading required package: pROC
## Type 'citation("pROC")' for a citation.
## 
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
## 
##     cov, smooth, var
op <- par(no.readonly = TRUE)
pander::panderOptions('digits', 3)
pander::panderOptions('keep.trailing.zeros',TRUE)

Libraries

data(lung)
## Warning in data(lung): data set 'lung' not found
lung$inst <- NULL
lung$status <- lung$status - 1
lung <- lung[complete.cases(lung),]

pander::pander(table(lung$status))
0 1
47 121
pander::pander(summary(lung$time))
Min. 1st Qu. Median Mean 3rd Qu. Max.
5 175 268 310 416 1022

Exploring Raw Features with RRPlot

convar <- colnames(lung)[lapply(apply(lung,2,unique),length) > 10]
convar <- convar[convar != "time"]
topvar <- univariate_BinEnsemble(lung[,c("status",convar)],"status")
pander::pander(topvar)
age wt.loss
0.106 0.106
topv <- min(5,length(topvar))
topFive <- names(topvar)[1:topv]
RRanalysis <- list();
idx <- 1
for (topf in topFive)
{
  RRanalysis[[idx]] <- RRPlot(cbind(lung$status,lung[,topf]),
                              atRate=c(0.90),
                  timetoEvent=lung$time,
                  title=topf,
#                  plotRR=FALSE
                  )
  idx <- idx + 1
}

names(RRanalysis) <- topFive

Reporting the Metrics

ROCAUC <- NULL
CstatCI <- NULL
LogRangp <- NULL
Sensitivity <- NULL
Specificity <- NULL

for (topf in topFive)
{
  CstatCI <- rbind(CstatCI,RRanalysis[[topf]]$c.index$cstatCI)
  LogRangp <- rbind(LogRangp,RRanalysis[[topf]]$surdif$pvalue)
  Sensitivity <- rbind(Sensitivity,RRanalysis[[topf]]$ROCAnalysis$sensitivity)
  Specificity <- rbind(Specificity,RRanalysis[[topf]]$ROCAnalysis$specificity)
  ROCAUC <- rbind(ROCAUC,RRanalysis[[topf]]$ROCAnalysis$aucs)
}
rownames(CstatCI) <- topFive
rownames(LogRangp) <- topFive
rownames(Sensitivity) <- topFive
rownames(Specificity) <- topFive
rownames(ROCAUC) <- topFive

pander::pander(ROCAUC)
  est lower upper
age 0.589 0.491 0.686
wt.loss 0.560 0.462 0.659
pander::pander(CstatCI)
  mean.C Index median lower upper
age 0.559 0.560 0.499 0.619
wt.loss 0.515 0.515 0.456 0.574
pander::pander(LogRangp)
age 0.919
wt.loss 0.358
pander::pander(Sensitivity)
  est lower upper
age 0.1157 0.0647 0.187
wt.loss 0.0496 0.0184 0.105
pander::pander(Specificity)
  est lower upper
age 0.872 0.743 0.952
wt.loss 0.894 0.769 0.965
meanMatrix <- cbind(ROCAUC[,1],CstatCI[,1],Sensitivity[,1],Specificity[,1])
colnames(meanMatrix) <- c("ROCAUC","C-Stat","Sen","Spe")
pander::pander(meanMatrix)
  ROCAUC C-Stat Sen Spe
age 0.589 0.559 0.1157 0.872
wt.loss 0.560 0.515 0.0496 0.894

Modeling

ml <- BSWiMS.model(Surv(time,status)~1,data=lung,NumberofRepeats = 10)

[+++++++++++++++++++++++++++++]..

sm <- summary(ml)
pander::pander(sm$coefficients)
Table continues below
  Estimate lower HR upper u.Accuracy r.Accuracy
ph.ecog 4.32e-01 1.194 1.541 1.988 0.679 0.649
sex -4.59e-01 0.456 0.632 0.876 0.649 0.679
pat.karno -1.77e-03 0.997 0.998 1.000 0.506 0.720
ph.karno -4.64e-07 1.000 1.000 1.000 0.577 0.720
age 4.57e-08 1.000 1.000 1.000 0.565 0.720
Table continues below
  full.Accuracy u.AUC r.AUC full.AUC IDI NRI
ph.ecog 0.601 0.601 0.620 0.600 0.0449 0.405
sex 0.601 0.620 0.601 0.600 0.0285 0.478
pat.karno 0.506 0.585 0.500 0.585 0.0292 0.342
ph.karno 0.577 0.570 0.500 0.570 0.0143 0.280
age 0.565 0.549 0.500 0.549 0.0162 0.195
  z.IDI z.NRI Delta.AUC Frequency
ph.ecog 3.33 2.48 -0.02005 1.0
sex 2.76 2.85 -0.00167 1.0
pat.karno 2.44 2.24 0.08546 1.0
ph.karno 2.22 1.64 0.06998 0.8
age 1.97 1.14 0.04871 0.1

Cox Model Performance

Here we evaluate the model using the RRPlot() function.

The evaluation of the raw Cox model with RRPlot()

Here we will use the predicted event probability assuming a baseline hazard for events withing 5 years

timeinterval <- 2*mean(subset(lung,status==1)$time)

h0 <- sum(lung$status & lung$time <= timeinterval)
h0 <- h0/sum((lung$time > timeinterval) | (lung$status==1))
pander::pander(t(c(h0=h0,timeinterval=timeinterval)),caption="Initial Parameters")
Initial Parameters
h0 timeinterval
0.85 578
index <- predict(ml,lung)

rdata <- cbind(lung$status,ppoisGzero(index,h0))

rrAnalysisTrain <- RRPlot(rdata,atRate=c(0.90),
                     timetoEvent=lung$time,
                     title="Raw Train: Lung Cancer",
                     ysurvlim=c(0.00,1.0),
                     riskTimeInterval=timeinterval)

By Risk Categories

obsexp <- rrAnalysisTrain$OERatio$atThrEstimates
pander::pander(obsexp)
  Observed L.CI H.CI Expected O/E Low Upper pvalue
Total 121 100.4 144.6 77.3 1.57 1.30 1.87 3.70e-06
low 83 66.1 102.9 51.6 1.61 1.28 1.99 4.97e-05
90% 38 26.9 52.2 25.9 1.47 1.04 2.01 2.33e-02
maxx <- 1.1*max(c(obsexp$Observed,obsexp$Expected))
minx <- 0.9*min(c(obsexp$Observed,obsexp$Expected))

plot(obsexp$Expected,obsexp$Observed,
     xlim=c(minx,maxx),
     ylim=c(minx,maxx),
     main="Cal. Expected vs Observed",
     ylab="Observed",
     xlab="Expected",
     col=rainbow(nrow(obsexp)),
     log="xy")

errbar(obsexp$Expected,obsexp$Observed,obsexp$L.CI,obsexp$H.CI,add=TRUE,pch=0,errbar.col=rainbow(nrow(obsexp)),cex=0.75)
lines(x=c(1,maxx),y=c(1,maxx),lty=2)
text(obsexp$Expected,obsexp$Observed,rownames(obsexp),pos=2,cex=0.75)

Time to Event Analysis

isevent <- rrAnalysisTrain$timetoEventData$eStatus == 1
exptime <- boxplot(rrAnalysisTrain$timetoEventData$expectedTime[isevent]~rrAnalysisTrain$timetoEventData$class[isevent],plot=FALSE)
obstime <- boxplot(rrAnalysisTrain$timetoEventData$eTime[isevent]~rrAnalysisTrain$timetoEventData$class[isevent],plot=FALSE)
classnames <- attr(rrAnalysisTrain$timetoEventData,"ClassNames") 
timesdata <- cbind(obstime$stats[c(2,3,4),],exptime$stats[c(2,3,4),])
rownames(timesdata) <- c("1Q","Median","3Q")
colnames(timesdata) <- c(paste("O",classnames,sep=":"),paste("E",classnames,sep=":"))
pander::pander(timesdata)
  O:Low O:At Risk > 0.648 E:Low E:At Risk > 0.648
1Q 168 92 286 176
Median 285 180 433 181
3Q 431 329 447 271
minv <- min(c(exptime$stats[2,],obstime$stats[2,]))
if (minv<0.001) minv <-0.001
maxv <- max(c(exptime$stats[4,],obstime$stats[4,]))
errbar(exptime$stats[3,],obstime$stats[3,],obstime$stats[2,],obstime$stats[4,],log="xy",
     xlab="Mean Expected Time",
     ylab="Mean Observed",
     xlim=c(minv,maxv),
     ylim=c(minv,maxv),
     main="Cal. Estimated Time to Event",col=rainbow(length(classnames)))

lines(x=c(minv,maxv),y=c(minv,maxv),col="black",lty=2)
legend("topleft",legend=classnames,lty=c(0),pch=c(16),col=rainbow(length(classnames)),cex=0.80)

Uncalibrated Performance Report

pander::pander(t(rrAnalysisTrain$keyPoints),caption="Threshold values")
Threshold values
  @:0.9 @MAX_BACC @MAX_RR @SPE100 p(0.5)
Thr 0.649 0.478 3.39e-01 3.39e-01 0.493
RR 1.214 1.742 6.85e+01 6.85e+01 1.270
RR_LCI 1.014 1.260 1.44e-01 1.44e-01 1.037
RR_UCI 1.454 2.408 3.26e+04 3.26e+04 1.555
SEN 0.314 0.826 1.00e+00 1.00e+00 0.612
SPE 0.830 0.511 1.91e-01 1.91e-01 0.596
BACC 0.572 0.669 5.96e-01 5.96e-01 0.604
NetBenefit 0.138 0.470 6.04e-01 6.04e-01 0.331
pander::pander(t(rrAnalysisTrain$OERatio$estimate),caption="O/E Ratio")
O/E Ratio
O/E Low Upper p.value
1.57 1.3 1.87 3.7e-06
pander::pander(t(rrAnalysisTrain$OE95ci),caption="O/E Mean")
O/E Mean
mean 50% 2.5% 97.5%
1.23 1.23 1.19 1.27
pander::pander(t(rrAnalysisTrain$OAcum95ci),caption="O/Acum Mean")
O/Acum Mean
mean 50% 2.5% 97.5%
1.27 1.27 1.26 1.29
pander::pander(rrAnalysisTrain$c.index$cstatCI,caption="C. Index")
mean.C Index median lower upper
0.651 0.653 0.595 0.711
pander::pander(t(rrAnalysisTrain$ROCAnalysis$aucs),caption="ROC AUC")
ROC AUC
est lower upper
0.691 0.598 0.784
pander::pander((rrAnalysisTrain$ROCAnalysis$sensitivity),caption="Sensitivity")
Sensitivity
est lower upper
0.314 0.233 0.405
pander::pander((rrAnalysisTrain$ROCAnalysis$specificity),caption="Specificity")
Specificity
est lower upper
0.83 0.692 0.924
pander::pander(t(rrAnalysisTrain$thr_atP),caption="Probability Thresholds")
Probability Thresholds
90%
0.648
pander::pander(rrAnalysisTrain$surdif,caption="Logrank test")
Logrank test Chisq = 7.945448 on 1 degrees of freedom, p = 0.004821
  N Observed Expected (O-E)^2/E (O-E)^2/V
class=0 122 83 95.6 1.65 7.95
class=1 46 38 25.4 6.22 7.95

Cox Calibration

op <- par(no.readonly = TRUE)


calprob <- CoxRiskCalibration(ml,lung,"status","time")

( 849.0437 , 781.9918 , 1.468556 , 121 , 140.6965 )

pander::pander(c(h0=calprob$h0,
                 Gain=calprob$hazardGain,
                 DeltaTime=calprob$timeInterval),
               caption="Cox Calibration Parameters")
h0 Gain DeltaTime
1.55 1.83 849

The RRplot() of the calibrated model

h0 <- calprob$h0
timeinterval <- calprob$timeInterval;

rdata <- cbind(lung$status,calprob$prob)


rrAnalysisTrain <- RRPlot(rdata,atRate=c(0.90),
                     timetoEvent=lung$time,
                     title="Train Cal: Lung",
                     ysurvlim=c(0.00,1.0),
                     riskTimeInterval=timeinterval)

By Risk Categories

obsexp <- rrAnalysisTrain$OERatio$atThrEstimates
pander::pander(obsexp)
  Observed L.CI H.CI Expected O/E Low Upper pvalue
Total 121 100.4 144.6 96.2 1.26 1.044 1.50 0.0142
low 83 66.1 102.9 64.2 1.29 1.029 1.60 0.0244
90% 38 26.9 52.2 32.3 1.18 0.833 1.62 0.2912
maxx <- 1.1*max(c(obsexp$Observed,obsexp$Expected))
minx <- 0.9*min(c(obsexp$Observed,obsexp$Expected))

plot(obsexp$Expected,obsexp$Observed,
     xlim=c(minx,maxx),
     ylim=c(minx,maxx),
     main="Cal. Expected vs Observed",
     ylab="Observed",
     xlab="Expected",
     col=rainbow(nrow(obsexp)),
     log="xy")

errbar(obsexp$Expected,obsexp$Observed,obsexp$L.CI,obsexp$H.CI,add=TRUE,pch=0,errbar.col=rainbow(nrow(obsexp)),cex=0.75)
lines(x=c(1,maxx),y=c(1,maxx),lty=2)
text(obsexp$Expected,obsexp$Observed,rownames(obsexp),pos=2,cex=0.75)

Time to Event Analysis

isevent <- rrAnalysisTrain$timetoEventData$eStatus == 1
exptime <- boxplot(rrAnalysisTrain$timetoEventData$expectedTime[isevent]~rrAnalysisTrain$timetoEventData$class[isevent],plot=FALSE)
obstime <- boxplot(rrAnalysisTrain$timetoEventData$eTime[isevent]~rrAnalysisTrain$timetoEventData$class[isevent],plot=FALSE)
classnames <- attr(rrAnalysisTrain$timetoEventData,"ClassNames") 
timesdata <- cbind(obstime$stats[c(2,3,4),],exptime$stats[c(2,3,4),])
rownames(timesdata) <- c("1Q","Median","3Q")
colnames(timesdata) <- c(paste("O",classnames,sep=":"),paste("E",classnames,sep=":"))
pander::pander(timesdata)
  O:Low O:At Risk > 0.851 E:Low E:At Risk > 0.851
1Q 168 92 230 142
Median 285 180 348 145
3Q 431 329 359 218
minv <- min(c(exptime$stats[2,],obstime$stats[2,]))
if (minv<0.001) minv <-0.001
maxv <- max(c(exptime$stats[4,],obstime$stats[4,]))
errbar(exptime$stats[3,],obstime$stats[3,],obstime$stats[2,],obstime$stats[4,],log="xy",
     xlab="Mean Expected Time",
     ylab="Mean Observed",
     xlim=c(minv,maxv),
     ylim=c(minv,maxv),
     main="Cal. Estimated Time to Event",col=rainbow(length(classnames)))

lines(x=c(minv,maxv),y=c(minv,maxv),col="black",lty=2)
legend("topleft",legend=classnames,lty=c(0),pch=c(16),col=rainbow(length(classnames)),cex=0.80)

Calibrated Train Performance

pander::pander(t(rrAnalysisTrain$keyPoints),caption="Threshold values")
Threshold values
  @:0.9 @MAX_BACC @MAX_RR @SPE100 p(0.5)
Thr 0.8523 0.695 5.31e-01 5.31e-01 5.31e-01
RR 1.2142 1.742 6.85e+01 6.85e+01 6.85e+01
RR_LCI 1.0143 1.260 1.44e-01 1.44e-01 1.44e-01
RR_UCI 1.4536 2.408 3.26e+04 3.26e+04 3.26e+04
SEN 0.3140 0.826 1.00e+00 1.00e+00 1.00e+00
SPE 0.8298 0.511 1.91e-01 1.91e-01 1.91e-01
BACC 0.5719 0.669 5.96e-01 5.96e-01 5.96e-01
NetBenefit -0.0484 0.283 4.64e-01 4.64e-01 4.64e-01
pander::pander(t(rrAnalysisTrain$OERatio$estimate),caption="O/E Ratio")
O/E Ratio
O/E Low Upper p.value
1.26 1.04 1.5 0.0142
pander::pander(t(rrAnalysisTrain$OE95ci),caption="O/E Mean")
O/E Mean
mean 50% 2.5% 97.5%
0.99 0.989 0.955 1.02
pander::pander(t(rrAnalysisTrain$OAcum95ci),caption="O/Acum Mean")
O/Acum Mean
mean 50% 2.5% 97.5%
1.02 1.02 1.01 1.02
pander::pander(rrAnalysisTrain$c.index$cstatCI,caption="C. Index")
mean.C Index median lower upper
0.651 0.65 0.591 0.711
pander::pander(t(rrAnalysisTrain$ROCAnalysis$aucs),caption="ROC AUC")
ROC AUC
est lower upper
0.691 0.598 0.784
pander::pander((rrAnalysisTrain$ROCAnalysis$sensitivity),caption="Sensitivity")
Sensitivity
est lower upper
0.314 0.233 0.405
pander::pander((rrAnalysisTrain$ROCAnalysis$specificity),caption="Specificity")
Specificity
est lower upper
0.83 0.692 0.924
pander::pander(t(rrAnalysisTrain$thr_atP),caption="Probability Thresholds")
Probability Thresholds
90%
0.851
pander::pander(rrAnalysisTrain$surdif,caption="Logrank test")
Logrank test Chisq = 7.945448 on 1 degrees of freedom, p = 0.004821
  N Observed Expected (O-E)^2/E (O-E)^2/V
class=0 122 83 95.6 1.65 7.95
class=1 46 38 25.4 6.22 7.95

Cross-Validation

rcv <- randomCV(theData=lung,
                theOutcome = Surv(time,status)~1,
                fittingFunction=BSWiMS.model, 
                trainFraction = 0.95,
                repetitions=200,
                classSamplingType = "Pro"
         )

.[++].[+++].[+++].[+++].[++].[++].[+].[+++].[+++].[+++]10 Tested: 74 Avg. Selected: 3.5 Min Tests: 1 Max Tests: 4 Mean Tests: 1.351351 . MAD: 0.4864521

.[+++].[+++].[+].[++].[+++].[+++].[+].[++].[+++].[+]20 Tested: 118 Avg. Selected: 3.35 Min Tests: 1 Max Tests: 5 Mean Tests: 1.694915 . MAD: 0.4734697

.[+++].[+++].[++].[++].[+].[++].[++].[+++].[++++].[+++]30 Tested: 144 Avg. Selected: 3.4 Min Tests: 1 Max Tests: 5 Mean Tests: 2.083333 . MAD: 0.4749689

.[+++].[+++].[+++].[+++].[++].[++].[++].[+++].[+++].[+++]40 Tested: 154 Avg. Selected: 3.475 Min Tests: 1 Max Tests: 7 Mean Tests: 2.597403 . MAD: 0.4785025

.[+++].[++].[+++].[+].[+++].[++].[+].[+++].[+++].[++]50 Tested: 159 Avg. Selected: 3.44 Min Tests: 1 Max Tests: 8 Mean Tests: 3.144654 . MAD: 0.4783724

.[++].[++-].[++++].[+].[++].[+++].[+++].[++].[+++].[+++]60 Tested: 165 Avg. Selected: 3.45 Min Tests: 1 Max Tests: 9 Mean Tests: 3.636364 . MAD: 0.4777576

.[++].[++].[+++].[++].[+].[+++].[+++].[+++].[++++].[++++]70 Tested: 165 Avg. Selected: 3.471429 Min Tests: 1 Max Tests: 9 Mean Tests: 4.242424 . MAD: 0.4783279

.[++++].[++++].[+++].[+++].[++-].[++++].[+++].[+++].[+++].[++-]80 Tested: 165 Avg. Selected: 3.55 Min Tests: 1 Max Tests: 10 Mean Tests: 4.848485 . MAD: 0.4782539

.[+++].[++].[+++].[+++].[+++].[++].[+].[+].[+].[+++]90 Tested: 166 Avg. Selected: 3.511111 Min Tests: 1 Max Tests: 11 Mean Tests: 5.421687 . MAD: 0.4781686

.[++++].[++].[+++].[+++].[++++].[+++].[++++].[+++].[++].[+]100 Tested: 167 Avg. Selected: 3.55 Min Tests: 1 Max Tests: 12 Mean Tests: 5.988024 . MAD: 0.4766993

.[++].[+].[+++].[+++].[+++].[+++].[+++].[++].[++++].[++]110 Tested: 168 Avg. Selected: 3.554545 Min Tests: 1 Max Tests: 14 Mean Tests: 6.547619 . MAD: 0.476821

.[++].[++].[++].[++].[+++].[++].[+].[+++].[+].[++]120 Tested: 168 Avg. Selected: 3.508333 Min Tests: 1 Max Tests: 14 Mean Tests: 7.142857 . MAD: 0.4766714

.[+++].[+++].[+++].[+++].[+++].[++].[++].[++].[+].[+++]130 Tested: 168 Avg. Selected: 3.507692 Min Tests: 1 Max Tests: 15 Mean Tests: 7.738095 . MAD: 0.4760375

.[+++].[++-].[++].[++].[+].[++].[+++].[+++].[++].[++]140 Tested: 168 Avg. Selected: 3.485714 Min Tests: 1 Max Tests: 16 Mean Tests: 8.333333 . MAD: 0.4760829

.[+++].[+].[+++].[+++].[+].[+++].[+++].[+++].[++].[+++]150 Tested: 168 Avg. Selected: 3.486667 Min Tests: 2 Max Tests: 16 Mean Tests: 8.928571 . MAD: 0.4764672

.[+++].[++].[++].[+].[+].[++].[+].[+++].[+++].[++]160 Tested: 168 Avg. Selected: 3.45625 Min Tests: 2 Max Tests: 19 Mean Tests: 9.52381 . MAD: 0.476116

.[+++].[+++].[++].[+++].[++].[++].[++].[+++].[++].[+++]170 Tested: 168 Avg. Selected: 3.458824 Min Tests: 2 Max Tests: 20 Mean Tests: 10.11905 . MAD: 0.476003

.[++-].[+++].[++].[++].[+++].[+].[+++].[+++].[+++].[++++]180 Tested: 168 Avg. Selected: 3.466667 Min Tests: 2 Max Tests: 20 Mean Tests: 10.71429 . MAD: 0.4755427

.[+++].[++].[+].[+++].[++].[++].[+++].[++].[+++].[++]190 Tested: 168 Avg. Selected: 3.457895 Min Tests: 3 Max Tests: 21 Mean Tests: 11.30952 . MAD: 0.4754696

.[++].[++-].[++-].[++].[+++].[+++].[+++].[+++].[+++].[++-]200 Tested: 168 Avg. Selected: 3.46 Min Tests: 3 Max Tests: 23 Mean Tests: 11.90476 . MAD: 0.4756583

stp <- rcv$survTestPredictions
stp <- stp[!is.na(stp[,4]),]

bbx <- boxplot(unlist(stp[,1])~rownames(stp),plot=FALSE)
times <- bbx$stats[3,]
status <- boxplot(unlist(stp[,2])~rownames(stp),plot=FALSE)$stats[3,]
prob <- ppoisGzero(boxplot(unlist(stp[,4])~rownames(stp),plot=FALSE)$stats[3,],h0)

rdatacv <- cbind(status,prob)
rownames(rdatacv) <- bbx$names
names(times) <- bbx$names

rrAnalysisTest <- RRPlot(rdatacv,atRate=c(0.90),
                     timetoEvent=times,
                     title="Test: Lung Cancer",
                     ysurvlim=c(0.00,1.0),
                     riskTimeInterval=timeinterval)

Cross-Validation Test Performance

pander::pander(t(rrAnalysisTest$keyPoints),caption="Threshold values")
Threshold values
  @:0.9 @MAX_BACC @MAX_RR @SPE100 p(0.5)
Thr 0.856 0.667 0.667 0.493 0.504
RR 1.186 2.958 2.958 1.000 0.719
RR_LCI 0.972 1.387 1.387 0.000 0.653
RR_UCI 1.447 6.309 6.309 0.000 0.790
SEN 0.198 0.959 0.959 1.000 0.992
SPE 0.894 0.298 0.298 0.000 0.000
BACC 0.546 0.628 0.628 0.500 0.496
NetBenefit -0.034 0.297 0.297 0.448 0.430
pander::pander(t(rrAnalysisTest$OERatio$estimate),caption="O/E Ratio")
O/E Ratio
O/E Low Upper p.value
1.23 1.02 1.48 0.0229
pander::pander(t(rrAnalysisTest$OE95ci),caption="O/E Mean")
O/E Mean
mean 50% 2.5% 97.5%
0.978 0.978 0.946 1.01
pander::pander(t(rrAnalysisTest$OAcum95ci),caption="O/Acum Mean")
O/Acum Mean
mean 50% 2.5% 97.5%
0.969 0.968 0.958 0.979
pander::pander(rrAnalysisTest$c.index$cstatCI,caption="C. Index")
mean.C Index median lower upper
0.593 0.59 0.522 0.651
pander::pander(t(rrAnalysisTest$ROCAnalysis$aucs),caption="ROC AUC")
ROC AUC
est lower upper
0.599 0.497 0.702
pander::pander((rrAnalysisTest$ROCAnalysis$sensitivity),caption="Sensitivity")
Sensitivity
est lower upper
0.19 0.124 0.271
pander::pander((rrAnalysisTest$ROCAnalysis$specificity),caption="Specificity")
Specificity
est lower upper
0.894 0.769 0.965
pander::pander(t(rrAnalysisTest$thr_atP),caption="Probability Thresholds")
Probability Thresholds
90%
0.86
pander::pander(rrAnalysisTest$surdif,caption="Logrank test")
Logrank test Chisq = 2.346444 on 1 degrees of freedom, p = 0.125569
  N Observed Expected (O-E)^2/E (O-E)^2/V
class=0 140 98 103.8 0.328 2.35
class=1 28 23 17.2 1.981 2.35

Calibrating the test results

rdatacv <- cbind(status,prob,times)
calprob <- CalibrationProbPoissonRisk(rdatacv)

( 858.7891 , 781.9918 , 1.485412 , 121 , 143.3832 )

pander::pander(c(h0=calprob$h0,
                 Gain=calprob$hazardGain,
                 DeltaTime=calprob$timeInterval),
               caption="Cox Calibration Parameters")
h0 Gain DeltaTime
0.85 1 859
timeinterval <- calprob$timeInterval;

rdata <- cbind(status,calprob$prob)


rrAnalysisTest <- RRPlot(rdata,atRate=c(0.90),
                     timetoEvent=times,
                     title="Calibrated Test: Lung",
                     ysurvlim=c(0.00,1.0),
                     riskTimeInterval=timeinterval)

Calibrated Test Performance

pander::pander(t(rrAnalysisTest$keyPoints),caption="Threshold values")
Threshold values
  @:0.9 @MAX_BACC @MAX_RR @SPE100 p(0.5)
Thr 0.856 0.667 0.667 0.493 0.504
RR 1.186 2.958 2.958 1.000 0.719
RR_LCI 0.972 1.387 1.387 0.000 0.653
RR_UCI 1.447 6.309 6.309 0.000 0.790
SEN 0.198 0.959 0.959 1.000 0.992
SPE 0.894 0.298 0.298 0.000 0.000
BACC 0.546 0.628 0.628 0.500 0.496
NetBenefit -0.034 0.297 0.297 0.448 0.430
pander::pander(t(rrAnalysisTest$OERatio$estimate),caption="O/E Ratio")
O/E Ratio
O/E Low Upper p.value
1.25 1.04 1.49 0.0169
pander::pander(t(rrAnalysisTest$OE95ci),caption="O/E Mean")
O/E Mean
mean 50% 2.5% 97.5%
0.989 0.99 0.956 1.02
pander::pander(t(rrAnalysisTest$OAcum95ci),caption="O/Acum Mean")
O/Acum Mean
mean 50% 2.5% 97.5%
0.969 0.97 0.958 0.98
pander::pander(rrAnalysisTest$c.index$cstatCI,caption="C. Index")
mean.C Index median lower upper
0.593 0.594 0.531 0.659
pander::pander(t(rrAnalysisTest$ROCAnalysis$aucs),caption="ROC AUC")
ROC AUC
est lower upper
0.599 0.497 0.702
pander::pander((rrAnalysisTest$ROCAnalysis$sensitivity),caption="Sensitivity")
Sensitivity
est lower upper
0.19 0.124 0.271
pander::pander((rrAnalysisTest$ROCAnalysis$specificity),caption="Specificity")
Specificity
est lower upper
0.894 0.769 0.965
pander::pander(t(rrAnalysisTest$thr_atP),caption="Probability Thresholds")
Probability Thresholds
90%
0.86
pander::pander(rrAnalysisTest$surdif,caption="Logrank test")
Logrank test Chisq = 2.346444 on 1 degrees of freedom, p = 0.125569
  N Observed Expected (O-E)^2/E (O-E)^2/V
class=0 140 98 103.8 0.328 2.35
class=1 28 23 17.2 1.981 2.35